home *** CD-ROM | disk | FTP | other *** search
/ Macintosh Technology Seed 1996 September / Macintosh Technology Seed (September 1996) (CDRM1437020).ISO / pc / qd3d15d6 / 15d6_sdk.exe / QD3D Win32 1.5d6 / Interfaces / QD3DView.h < prev    next >
C/C++ Source or Header  |  1996-08-21  |  20KB  |  617 lines

  1. /******************************************************************************
  2.  **                                                                             **
  3.  **     Module:        QD3DView.h                                                 **
  4.  **                                                                             **
  5.  **                                                                             **
  6.  **     Purpose:     View types and routines                                     **
  7.  **                                                                             **
  8.  **                                                                             **
  9.  **                                                                             **
  10.  **     Copyright (C) 1992-1996 Apple Computer, Inc.  All rights reserved.     **
  11.  **                                                                             **
  12.  **                                                                             **
  13.  *****************************************************************************/
  14. #ifndef QD3DView_h
  15. #define QD3DView_h
  16.  
  17. #if defined(PRAGMA_ONCE) && PRAGMA_ONCE
  18.     #pragma once
  19. #endif  /*  PRAGMA_ONCE  */
  20.  
  21. #include "QD3DStyle.h"
  22. #include "QD3DSet.h"
  23.  
  24. #if defined(THINK_C) || defined(__SC__)
  25.     #pragma options(!pack_enums, !align_arrays)
  26.     #pragma SC options align=power
  27. #elif defined(__MWERKS__)
  28.     #pragma enumsalwaysint on
  29.     #pragma align_array_members off
  30.     #pragma options align=native
  31. #elif defined(__PPCC__)
  32.     #pragma options align=power
  33. #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
  34.     #pragma options enum=int
  35. #endif
  36.  
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif    /* __cplusplus */
  40.  
  41.  
  42. /******************************************************************************
  43.  **                                                                             **
  44.  **                        View Type Definitions                                 **
  45.  **                                                                             **
  46.  *****************************************************************************/
  47.  
  48. typedef enum TQ3ViewStatus {
  49.     kQ3ViewStatusDone,
  50.     kQ3ViewStatusRetraverse,
  51.     kQ3ViewStatusError,
  52.     kQ3ViewStatusCancelled
  53. } TQ3ViewStatus;
  54.  
  55. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  56.  
  57. typedef struct TQ3RendererCachePrivate *TQ3RendererCache;
  58.  
  59. #endif /* ESCHER_VER_FUTURE */
  60.  
  61. /******************************************************************************
  62.  **                                                                             **
  63.  **                        Default Attribute Set                                 **
  64.  **                                                                             **
  65.  *****************************************************************************/
  66.  
  67. #define kQ3ViewDefaultAmbientCoefficient    1.0
  68. #define kQ3ViewDefaultDiffuseColor            0.5, 0.5, 0.5
  69. #define kQ3ViewDefaultSpecularColor            0.5, 0.5, 0.5
  70. #define kQ3ViewDefaultSpecularControl        4.0
  71. #define kQ3ViewDefaultTransparency            1.0, 1.0, 1.0
  72. #define kQ3ViewDefaultHighlightColor        1.0, 0.0, 0.0
  73.  
  74. #define kQ3ViewDefaultSubdivisionMethod        kQ3SubdivisionMethodScreenSpace
  75. #define kQ3ViewDefaultSubdivisionC1            20.0
  76. #define kQ3ViewDefaultSubdivisionC2            20.0
  77.  
  78.  
  79. /******************************************************************************
  80.  **                                                                             **
  81.  **                            View Routines                                     **
  82.  **                                                                             **
  83.  *****************************************************************************/
  84.  
  85. QD3D_EXPORT TQ3ViewObject Q3View_New(
  86.     void);
  87.  
  88. QD3D_EXPORT TQ3Status Q3View_Cancel(
  89.     TQ3ViewObject        view);
  90.  
  91. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  92.  
  93. QD3D_EXPORT TQ3ObjectType Q3View_GetType(
  94.     TQ3ViewObject        view);
  95.     
  96. #endif  /*  ESCHER_VER_FUTURE  */
  97.  
  98. /******************************************************************************
  99.  **                                                                             **
  100.  **                        View Rendering routines                                 **
  101.  **                                                                             **
  102.  *****************************************************************************/
  103.  
  104. QD3D_EXPORT TQ3Status Q3View_SetRendererByType(
  105.     TQ3ViewObject         view,
  106.     TQ3ObjectType         type);
  107.     
  108. QD3D_EXPORT TQ3Status Q3View_SetRenderer(
  109.     TQ3ViewObject         view,
  110.     TQ3RendererObject    renderer);
  111.  
  112. QD3D_EXPORT TQ3Status Q3View_GetRenderer(
  113.     TQ3ViewObject        view,
  114.     TQ3RendererObject    *renderer);
  115.     
  116. QD3D_EXPORT TQ3Status Q3View_StartRendering(
  117.     TQ3ViewObject         view);
  118.     
  119. QD3D_EXPORT TQ3ViewStatus Q3View_EndRendering(
  120.     TQ3ViewObject         view);
  121.     
  122. QD3D_EXPORT TQ3Status Q3View_Flush(
  123.     TQ3ViewObject        view);
  124.     
  125. QD3D_EXPORT TQ3Status Q3View_Sync(
  126.     TQ3ViewObject        view);
  127.  
  128. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  129.  
  130. /******************************************************************************
  131.  **                                                                             **
  132.  **                        View Cache Rendering routines                         **
  133.  **                                                                             **
  134.  *****************************************************************************/
  135.  
  136. /*
  137.  *    Q3RendererCache_New
  138.  *    
  139.  *    Create a new, empty rendering cache
  140.  */
  141. QD3D_EXPORT TQ3RendererCache Q3RendererCache_New(
  142.     void);
  143.  
  144. /*
  145.  *    Q3RendererCache_Invalidate
  146.  *    
  147.  *    Deletes any cached data and forces re-traversal in the
  148.  *    rendering loop. (see comment below for rendering loop example)
  149.  */
  150. QD3D_EXPORT TQ3Status Q3RendererCache_Invalidate(
  151.     TQ3RendererCache        rendererCache);
  152.  
  153. /*
  154.  *    Q3RendererCache_Delete
  155.  *    
  156.  *    Delete a rendering cache.
  157.  */
  158. QD3D_EXPORT TQ3Status Q3RendererCache_Delete(
  159.     TQ3RendererCache        rendererCache);
  160.  
  161. /*
  162.  *    Q3View_StartRendererCache
  163.  *    Q3View_EndRendererCache
  164.  *    
  165.  *    Called between Q3View_StartRendering and Q3View_EndRendering.
  166.  *    
  167.  *    Q3View_BeginRendererCache
  168.  *        returns
  169.  *            kQ3True if the cache requires re-traversal, or
  170.  *            kQ3False if the cache is valid.
  171.  *    
  172.  *    The dependencies of a renderer cache are based on the implementation
  173.  *    of a particular renderer. 
  174.  *    
  175.  *    For example, a Z-Buffered renderer may cache the pixels and Z information
  176.  *    for a particular scene, which depends on the lights and camera in a scene.
  177.  *    
  178.  *    A ray tracer may cache the geometry list, and references to each geometry.
  179.  *    
  180.  *    Therefore, coherency in a renderer cache may depend on what you are
  181.  *    editing in a scene.
  182.  *    
  183.  *    You should structure your code as such:
  184.  *    
  185.  *    Q3View_StartRendering(view)
  186.  *    do {
  187.  *        if (Q3View_StartRendererCache(view, cacheID)) {
  188.  *            Q3Group_Submit(largeAuditorium, view);
  189.  *            Q3View_EndRendererCache(view);
  190.  *        }
  191.  *        Q3Group_Submit(peopleMillingAbout, view);
  192.  *    } while (Q3View_EndRendering(view) == kQ3ViewStatusRetraverse);
  193.  *    
  194.  *    The cached information will be regenerated whenever the cache is
  195.  *    invalidated.
  196.  */
  197.  
  198. QD3D_EXPORT TQ3Boolean Q3View_StartRendererCache(
  199.     TQ3ViewObject            view,
  200.     TQ3RendererCache        cacheID);
  201.  
  202. QD3D_EXPORT TQ3Status Q3View_EndRendererCache(
  203.     TQ3ViewObject            view);
  204.  
  205. #endif  /*  ESCHER_VER_FUTURE  */
  206.  
  207. /******************************************************************************
  208.  **                                                                             **
  209.  **                        View/Bounds/Pick routines                             **
  210.  **                                                                             **
  211.  *****************************************************************************/
  212.  
  213. QD3D_EXPORT TQ3Status Q3View_StartBoundingBox(
  214.     TQ3ViewObject        view,
  215.     TQ3ComputeBounds    computeBounds);
  216.  
  217. QD3D_EXPORT TQ3ViewStatus Q3View_EndBoundingBox(
  218.     TQ3ViewObject        view,
  219.     TQ3BoundingBox        *result);
  220.  
  221. QD3D_EXPORT TQ3Status Q3View_StartBoundingSphere(
  222.     TQ3ViewObject        view,
  223.     TQ3ComputeBounds    computeBounds);
  224.  
  225. QD3D_EXPORT TQ3ViewStatus Q3View_EndBoundingSphere(
  226.     TQ3ViewObject        view,
  227.     TQ3BoundingSphere    *result);
  228.  
  229. QD3D_EXPORT TQ3Status Q3View_StartPicking(
  230.     TQ3ViewObject        view,
  231.     TQ3PickObject        pick);
  232.  
  233. QD3D_EXPORT TQ3ViewStatus Q3View_EndPicking(
  234.     TQ3ViewObject        view);
  235.  
  236.  
  237. /******************************************************************************
  238.  **                                                                             **
  239.  **                            View/Camera routines                             **
  240.  **                                                                             **
  241.  *****************************************************************************/
  242.  
  243. QD3D_EXPORT TQ3Status Q3View_GetCamera(
  244.     TQ3ViewObject        view,
  245.     TQ3CameraObject        *camera);
  246.  
  247. QD3D_EXPORT TQ3Status Q3View_SetCamera(
  248.     TQ3ViewObject        view,
  249.     TQ3CameraObject        camera);
  250.  
  251. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  252.  
  253. #if 0
  254. /* If'ed out so linker doesn't complain */
  255.  
  256. QD3D_EXPORT TQ3Status Q3View_GetCameraTransformState(
  257.     TQ3ViewObject        view,
  258.     TQ3Boolean            *cameraIsTranformed);
  259.  
  260. QD3D_EXPORT TQ3Status Q3View_SetCameraTransformState(
  261.     TQ3ViewObject        view,
  262.     TQ3Boolean            cameraIsTranformed);
  263.  
  264. #endif  /*  0  */
  265.  
  266. #endif  /*  ESCHER_VER_FUTURE  */
  267.  
  268. /******************************************************************************
  269.  **                                                                             **
  270.  **                            View/Shader routines                             **
  271.  **                                                                             **
  272.  *****************************************************************************/
  273.  
  274. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  275.  
  276. QD3D_EXPORT TQ3Status Q3View_SetBackgroundShader(
  277.     TQ3ViewObject        view,
  278.     TQ3ShaderObject        backgroundShader);
  279.     
  280. QD3D_EXPORT TQ3Status Q3View_GetBackgroundShader(
  281.     TQ3ViewObject        view,
  282.     TQ3ShaderObject        *backgroundShader);
  283.  
  284. #endif  /*  ESCHER_VER_FUTURE  */
  285.  
  286.  
  287. /******************************************************************************
  288.  **                                                                             **
  289.  **                            View/Lights routines                             **
  290.  **                                                                             **
  291.  *****************************************************************************/
  292.  
  293. QD3D_EXPORT TQ3Status Q3View_SetLightGroup(
  294.     TQ3ViewObject        view,
  295.     TQ3GroupObject        lightGroup);
  296.  
  297. QD3D_EXPORT TQ3Status Q3View_GetLightGroup(
  298.     TQ3ViewObject        view,
  299.     TQ3GroupObject        *lightGroup);
  300.  
  301. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  302.  
  303. #if 0
  304. /* If'ed out so linker doesn't complain */
  305.  
  306. QD3D_EXPORT TQ3Status Q3View_GetLightTransformState(
  307.     TQ3ViewObject        view,
  308.     TQ3Boolean            *lightsAreTransformed);
  309.  
  310. QD3D_EXPORT TQ3Status Q3View_SetLightTransformState(
  311.     TQ3ViewObject        view,
  312.     TQ3Boolean            lightsAreTransformed);
  313.     
  314. #endif  /*  0  */
  315.  
  316. #endif  /*  ESCHER_VER_FUTURE  */
  317.  
  318. /******************************************************************************
  319.  **                                                                             **
  320.  **                                Idle Method                                     **
  321.  **                                                                             **
  322.  *****************************************************************************/
  323. /*
  324.  *    The idle methods allow the application to register callback routines 
  325.  *    which will be called by the view during especially long operations.
  326.  *
  327.  *    The idle methods may also be used to interrupt long renderings or
  328.  *    traversals.  Inside    the idler callback the application can check for
  329.  *    Command-Period, Control-C or clicking a "Cancel" button or whatever else
  330.  *    may be used to let the user interrupt rendering.    
  331.  *
  332.  *    It is NOT LEGAL to call QD3D routines inside an idler callback.
  333.  *
  334.  *    Return kQ3Failure to cancel rendering, kQ3Success to continue. Don't
  335.  *    bother posting an error.
  336.  *
  337.  *    Q3View_SetIdleMethod registers a callback that can be called
  338.  *    by the system during rendering.  Unfortunately there is no way yet
  339.  *    to set timer intervals when you want to be called.  Basically, it is
  340.  *    up to the application's idler callback to check clocks to see if you
  341.  *    were called back only a millisecond ago or an hour ago!
  342.  *
  343.  *    Q3View_SetIdleProgressMethod registers a callback that also gives
  344.  *    progress information. This information is supplied by the renderer, and
  345.  *    may or may not be based on real time.
  346.  *
  347.  *    If a renderer doesn't support the progress method, your method will be
  348.  *    called with current == 0 and completed == 0.
  349.  *    
  350.  *    Otherwise, you are GUARANTEED to get called at least 2 or more times:
  351.  *    
  352.  *    ONCE            idleMethod(view, 0, n)        -> Initialize, Show Dialog
  353.  *    zero or more    idleMethod(view, 1..n-1, n) -> Update progress
  354.  *    ONCE            idleMethod(view, n, n)        -> Exit, Hide Dialog
  355.  *    
  356.  *    "current" is guaranteed to be less than or equal to "completed"
  357.  *    "completed" may change values, but current/complete always indicates
  358.  *    the degree of completion.
  359.  *
  360.  *    The calling conventions aid in managing any data associated with a 
  361.  *    progress user interface indicator.
  362. */
  363.  
  364. typedef TQ3Status (*TQ3ViewIdleMethod)(
  365.     TQ3ViewObject        view,
  366.     const void            *idlerData);
  367.  
  368. typedef TQ3Status (*TQ3ViewIdleProgressMethod)(
  369.     TQ3ViewObject        view,
  370.     const void            *idlerData,
  371.     unsigned long        current,
  372.     unsigned long        completed);
  373.  
  374. QD3D_EXPORT TQ3Status Q3View_SetIdleMethod(
  375.     TQ3ViewObject        view,
  376.     TQ3ViewIdleMethod    idleMethod,
  377.     const void             *idleData);
  378.  
  379. QD3D_EXPORT TQ3Status Q3View_SetIdleProgressMethod(
  380.     TQ3ViewObject                view,
  381.     TQ3ViewIdleProgressMethod    idleMethod,
  382.     const void                     *idleData);
  383.  
  384. /******************************************************************************
  385.  **                                                                             **
  386.  **                                EndFrame Method                                 **
  387.  **                                                                             **
  388.  *****************************************************************************/
  389.  
  390. /*
  391.  *    The end frame method is an alternate way of determining when an
  392.  *    asynchronous renderer has completed rendering a frame. It differs from
  393.  *    Q3View_Sync in that notification of the frame completion is the opposite
  394.  *    direction. 
  395.  *    
  396.  *    With Q3View_Sync the application asks a renderer to finish rendering
  397.  *    a frame, and blocks until the frame is complete.
  398.  *    
  399.  *    With the EndFrame method, the renderer tells the application that is has
  400.  *    completed a frame.
  401.  *
  402.  *    If "Q3View_Sync" is called BEFORE this method has been called, this
  403.  *    method will NOT be called ever.
  404.  *    
  405.  *    If "Q3View_Sync" is called AFTER this method has been called, the
  406.  *    call will return immediately (as the frame has already been completed).
  407.  */
  408.  
  409. typedef void (*TQ3ViewEndFrameMethod)(
  410.     TQ3ViewObject            view,
  411.     void                    *endFrameData);
  412.  
  413. QD3D_EXPORT TQ3Status Q3View_SetEndFrameMethod(
  414.     TQ3ViewObject            view,
  415.     TQ3ViewEndFrameMethod    endFrame,
  416.     void                     *endFrameData);
  417.  
  418. /******************************************************************************
  419.  **                                                                             **
  420.  **                            Push/Pop routines                                 **
  421.  **                                                                             **
  422.  *****************************************************************************/
  423.  
  424. QD3D_EXPORT TQ3Status Q3Push_Submit(
  425.     TQ3ViewObject     view);
  426.  
  427. QD3D_EXPORT TQ3Status Q3Pop_Submit(
  428.     TQ3ViewObject     view);
  429.  
  430.  
  431. /******************************************************************************
  432.  **                                                                             **
  433.  **        Check if bounding box is visible in the viewing frustum.  Transforms **
  434.  **        the bbox by the current local_to_world transformation matrix and     **
  435.  **        does a clip test to see if it lies in the viewing frustum.             **
  436.  **        This can be used by applications to cull out large chunks of scenes     **
  437.  **        that are not going to be visible.                                     **
  438.  **                                                                             **
  439.  **        The default implementation is to always return kQ3True.  Renderers     **
  440.  **        may override this routine however to do the checking.                 **
  441.  **                                                                             **
  442.  *****************************************************************************/
  443.  
  444. QD3D_EXPORT TQ3Boolean Q3View_IsBoundingBoxVisible(
  445.     TQ3ViewObject            view,
  446.     const TQ3BoundingBox    *bbox);
  447.  
  448.  
  449. /******************************************************************************
  450.  **                                                                             **
  451.  **                            DrawContext routines                             **
  452.  **                                                                             **
  453.  *****************************************************************************/
  454.  
  455. QD3D_EXPORT TQ3Status Q3View_SetDrawContext(
  456.     TQ3ViewObject             view,
  457.     TQ3DrawContextObject    drawContext);
  458.  
  459. QD3D_EXPORT TQ3Status Q3View_GetDrawContext(
  460.     TQ3ViewObject             view,
  461.     TQ3DrawContextObject    *drawContext);
  462.  
  463.  
  464. /******************************************************************************
  465.  **                                                                             **
  466.  **                            Graphics State routines                             **
  467.  **                                                                             **
  468.  ** The graphics state routines can only be called while rendering (ie. in     **
  469.  ** between calls to start and end rendering calls).  If they are called     **
  470.  ** outside of a rendering loop, they will return with error.                 **
  471.  **                                                                             **
  472.  *****************************************************************************/
  473.   
  474. /******************************************************************************
  475.  **                                                                             **
  476.  **                            Transform routines                                 **
  477.  **                                                                             **
  478.  *****************************************************************************/
  479.  
  480. QD3D_EXPORT TQ3Status Q3View_GetLocalToWorldMatrixState(
  481.     TQ3ViewObject        view,
  482.     TQ3Matrix4x4        *matrix);
  483.         
  484. QD3D_EXPORT TQ3Status Q3View_GetWorldToFrustumMatrixState(
  485.     TQ3ViewObject        view,
  486.     TQ3Matrix4x4        *matrix);
  487.         
  488. QD3D_EXPORT TQ3Status Q3View_GetFrustumToWindowMatrixState(
  489.     TQ3ViewObject        view,
  490.     TQ3Matrix4x4        *matrix);
  491.     
  492.  
  493. /******************************************************************************
  494.  **                                                                             **
  495.  **                            Style state routines                             **
  496.  **                                                                             **
  497.  *****************************************************************************/
  498.  
  499. QD3D_EXPORT TQ3Status Q3View_GetBackfacingStyleState(
  500.     TQ3ViewObject            view,
  501.     TQ3BackfacingStyle        *backfacingStyle);
  502.  
  503. QD3D_EXPORT TQ3Status Q3View_GetInterpolationStyleState(
  504.     TQ3ViewObject            view,
  505.     TQ3InterpolationStyle    *interpolationType);
  506.  
  507. QD3D_EXPORT TQ3Status Q3View_GetFillStyleState(
  508.     TQ3ViewObject            view,
  509.     TQ3FillStyle            *fillStyle);
  510.  
  511. QD3D_EXPORT TQ3Status Q3View_GetHighlightStyleState(
  512.     TQ3ViewObject            view,
  513.     TQ3AttributeSet            *highlightStyle);
  514.  
  515. QD3D_EXPORT TQ3Status Q3View_GetSubdivisionStyleState(
  516.     TQ3ViewObject            view,
  517.     TQ3SubdivisionStyleData    *subdivisionStyle);
  518.  
  519. QD3D_EXPORT TQ3Status Q3View_GetOrientationStyleState(
  520.     TQ3ViewObject            view,
  521.     TQ3OrientationStyle        *fontFacingDirectionStyle);
  522.  
  523. QD3D_EXPORT TQ3Status Q3View_GetReceiveShadowsStyleState(
  524.     TQ3ViewObject            view,
  525.     TQ3Boolean                *receives);
  526.  
  527. QD3D_EXPORT TQ3Status Q3View_GetPickIDStyleState(
  528.     TQ3ViewObject            view,
  529.     unsigned long            *pickIDStyle);
  530.     
  531. QD3D_EXPORT TQ3Status Q3View_GetPickPartsStyleState(
  532.     TQ3ViewObject            view,
  533.     TQ3PickParts            *pickPartsStyle);
  534.  
  535. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  536.  
  537. #if 0
  538. /* If'ed out so linker doesn't complain */
  539.  
  540. QD3D_EXPORT TQ3Status Q3View_GetAntiAliasStyleState(
  541.     TQ3ViewObject            view,
  542.     TQ3AntiAliasStyleData    *antiAliasData);
  543.     
  544. #endif  /*  0  */
  545.  
  546. #endif /* ESCHER_VER_FUTURE */
  547.  
  548. /******************************************************************************
  549.  **                                                                             **
  550.  **                        Attribute state routines                             **
  551.  **                                                                             **
  552.  *****************************************************************************/
  553.  
  554. QD3D_EXPORT TQ3Status Q3View_GetDefaultAttributeSet(
  555.     TQ3ViewObject        view,
  556.     TQ3AttributeSet        *attributeSet);
  557.  
  558. QD3D_EXPORT TQ3Status Q3View_SetDefaultAttributeSet(
  559.     TQ3ViewObject        view,
  560.     TQ3AttributeSet        attributeSet);
  561.  
  562.  
  563. QD3D_EXPORT TQ3Status Q3View_GetAttributeSetState(
  564.     TQ3ViewObject         view,
  565.     TQ3AttributeSet        *attributeSet);
  566.  
  567. QD3D_EXPORT TQ3Status Q3View_GetAttributeState(
  568.     TQ3ViewObject         view,
  569.     TQ3AttributeType    attributeType,
  570.     void                *data);
  571.  
  572. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  573.  
  574. /******************************************************************************
  575.  **                                                                             **
  576.  **                            Animation routines                                 **
  577.  **                                                                             **
  578.  *****************************************************************************/
  579.  
  580. QD3D_EXPORT TQ3Status Q3View_SetGlobalTime(
  581.     TQ3ViewObject         view,
  582.     float                time);
  583.  
  584. QD3D_EXPORT TQ3Status Q3View_GetGlobalTime(
  585.     TQ3ViewObject         view,
  586.     float                *time);
  587.  
  588. QD3D_EXPORT TQ3Status Q3View_SetAnimationDuration(
  589.     TQ3ViewObject         view,
  590.     float                duration);
  591.  
  592. QD3D_EXPORT TQ3Status Q3View_GetAnimationDuration(
  593.     TQ3ViewObject         view,
  594.     float                *duration);
  595.  
  596. QD3D_EXPORT TQ3Status Q3View_SetAnimationEngineState(
  597.     TQ3ViewObject         view,
  598.     TQ3Switch             state);
  599.     
  600. QD3D_EXPORT TQ3Status Q3View_GetAnimationEngineState(
  601.     TQ3ViewObject         view,
  602.     TQ3Switch             *state);
  603.  
  604. #endif  /*  ESCHER_VER_FUTURE  */
  605.  
  606. #ifdef __cplusplus
  607. }
  608. #endif    /* __cplusplus */
  609.  
  610. #if defined(__MWERKS__)
  611.     #pragma enumsalwaysint reset
  612. #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
  613.     #pragma options enum=reset
  614. #endif
  615.  
  616. #endif  /*  QD3DView_h  */
  617.